home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / cli / mx2src.arc / PASSWD.MOD < prev    next >
Text File  |  1989-01-05  |  4KB  |  125 lines

  1. MODULE  PASSWD;
  2. FROM    Terminal   IMPORT  ReadString,WriteString,WriteLn;
  3. FROM    TermBase   IMPORT  DoWrite,WriteProc;
  4. FROM    Strings    IMPORT  String,Compare,CompareResults,Pos,Copy,Concat,
  5.                            Length;
  6. FROM    GEMDOS     IMPORT  OldTerm,Rename,Delete,Open,Close;
  7. IMPORT  TextIO;
  8. FROM    Streams    IMPORT  StreamKinds,CloseStream;
  9. FROM    GEMX       IMPORT  BasePageAddress;
  10. FROM    LOGIN      IMPORT  crypt;
  11. CONST   USERS = 16;
  12. TYPE    sString =       ARRAY [0..13] OF CHAR;
  13.         lString =       ARRAY [0..64] OF CHAR;
  14. VAR     user,password,prg       :       ARRAY [0..USERS-1] OF sString;
  15.         path,com                :       ARRAY [0..USERS-1] OF lString;
  16.         input,clipath           :       String;
  17.         black                   :       sString;
  18.         i,index,spos,epos       :       CARDINAL;
  19.         userfound,ok            :       BOOLEAN;
  20.         normal,noecho           :       WriteProc;
  21.         result                  :       INTEGER;
  22.  
  23. PROCEDURE       NoEcho(char: CHAR);
  24. BEGIN
  25. END             NoEcho;
  26.  
  27. BEGIN
  28.         Open("passwd",0,result);
  29.         IF result>0 THEN
  30.            ok:=Close(result);
  31.         ELSE
  32.            OldTerm;
  33.         END;
  34.         TextIO.SetDefaultIO("PASSWD",READ,result);
  35.         normal:=DoWrite;
  36.         noecho:=NoEcho;
  37.         FOR i:=0 TO USERS-1 DO               (* read in userfile *)
  38.                 TextIO.ReadString(input);
  39.                 IF input[0]#0c THEN
  40.                 spos:=0;
  41.                 ok:=Pos(input,":",spos,epos);
  42.                 Copy(input,spos,epos-spos,user[i]);
  43.                 spos:=epos+1;
  44.                 ok:=Pos(input,":",spos,epos);
  45.                 Copy(input,spos,epos-spos,password[i]);
  46.                 spos:=epos+1;
  47.                 ok:=Pos(input,":",spos,epos);
  48.                 Copy(input,spos,epos-spos,path[i]);
  49.                 spos:=epos+1;
  50.                 ok:=Pos(input,":",spos,epos);
  51.                 Copy(input,spos,epos-spos,prg[i]);
  52.                 spos:=epos+1;
  53.                 Copy(input,spos,Length(input)-spos,com[i]);
  54.                 END;
  55.         END; (* for *)
  56.         CloseStream(TextIO.in,result);
  57.         CloseStream(TextIO.out,result);
  58.         LOOP
  59.            userfound:=FALSE;
  60.            FOR i:=0 TO CARDINAL(BasePageAddress^.CmdLine[0]) DO
  61.                input[i]:=BasePageAddress^.CmdLine[i+1]; (* read in command line *)
  62.            END;
  63.            input[i+1]:=0c;
  64.            IF input[0]=0c THEN OldTerm END; (* no user exit *)
  65.            FOR i:=0 TO USERS-1 DO
  66.                IF Compare(input,user[i])=Equal THEN
  67.                   userfound:=TRUE;
  68.                   index:=i;
  69.                END;
  70.            END;
  71.            IF (password[index][0]#0c) OR (NOT userfound) THEN
  72.            WriteString("Old Password: ");
  73.            DoWrite:=noecho;
  74.            ReadString(input);
  75.            DoWrite:=normal;
  76.            WriteLn;
  77.            black:=user[index];
  78.            crypt(input,black);
  79.            IF (Compare(black,password[index])=Equal) AND userfound THEN
  80.               EXIT;
  81.            END;
  82.            END;
  83.            IF (password[index][0]=0c) AND userfound THEN EXIT END;
  84.            WriteString("Incorrect Password not changed!");
  85.            WriteLn;
  86.            OldTerm;
  87.         END; (* loop *)
  88.         REPEAT
  89.         WriteString("New Password: ");
  90.         DoWrite:=noecho;
  91.         ReadString(password[index]);
  92.         DoWrite:=normal;
  93.         WriteLn;
  94.         IF Length(password[index])<4 THEN
  95.            WriteString("Password too short. Please use a longer password.");
  96.            WriteLn;
  97.         END;
  98.         UNTIL (Length(password[index])>=4);
  99.         black:=user[index];
  100.         crypt(password[index],black);
  101.         password[index]:=black;
  102.         ok:=Delete("passwd.old");
  103.         Rename("passwd","passwd.old");
  104.         ok:=Delete("passwd");
  105.         TextIO.SetDefaultIO("PASSWD",READWRITE,result);
  106.         FOR i:=0 TO USERS-1 DO               (* Write passwd file *)
  107.             IF user[i][0]#0c THEN
  108.                 TextIO.WriteString(user[i]);
  109.                 TextIO.Write(':');
  110.                 TextIO.WriteString(password[i]);
  111.                 TextIO.Write(':');
  112.                 TextIO.WriteString(path[i]);
  113.                 TextIO.Write(':');
  114.                 TextIO.WriteString(prg[i]);
  115.                 TextIO.Write(':');
  116.                 TextIO.WriteString(com[i]);
  117.                 TextIO.WriteLn;
  118.             END;
  119.         END; (* for *)
  120.         CloseStream(TextIO.in,result);
  121.         CloseStream(TextIO.out,result);
  122.         OldTerm;
  123. END     PASSWD.
  124.  
  125.